package planete;

import java.awt.*;
import java.awt.geom.*;

public class Planeta {
	private double masa;
	private Vektor brzina;
	private Vektor ubrzanje;
	private Vektor pozicija;
	private GradientPaint boja;
	private Ellipse2D krug = new Ellipse2D.Double(-1, -1, 2, 2);
	private AffineTransform tr = new AffineTransform();

	private String naziv;
	private double ugaoRotacije;
	private double korakRotacije;

	public Planeta(String naz, double m, Vektor b, Vektor p, Color c1, Color c2) {
		naziv = naz;
		masa = m;
		brzina = b;
		pozicija = p;
		ubrzanje = new Vektor(0, 0, 0);
		boja = new GradientPaint(-1, 0, c1, 1, 0, c2);
		ugaoRotacije = 0;
		korakRotacije = Math.random();
	}

	public void gUbrzanje(Vektor f) {
		ubrzanje = f;
		ugaoRotacije += korakRotacije;
	}

	public void protekloVreme(double vreme) {
		brzina.dodaj(ubrzanje.proizvod(vreme));
		pozicija.dodaj(brzina.proizvod(vreme));
	}

	public double masa() {
		return masa;
	}

	public void draw(Graphics2D g2D) {
		g2D.setPaint(boja);

		tr.setToIdentity();

		tr.translate(pozicija.x(), pozicija.y());
		tr.scale(1 + masa / 10, 1 + masa / 10);
		tr.rotate(ugaoRotacije);
		g2D.setTransform(tr);

		g2D.fill(krug);

		tr.setToIdentity();
		tr.translate(pozicija.x(), pozicija.y());
		tr.scale(1 + masa / 10, 1 + masa / 10);
		g2D.setTransform(tr);

		// KAKO BIH URADIO DA za koliko skaliram da ubrzanje bude fixna linija
		// koja se crta,vrv bih morao da pamtim poluprecnik

		g2D.setPaint(Color.blue);
		g2D.setStroke(new BasicStroke(0));
		g2D.draw(new Line2D.Double(-0.5, -0.5, ubrzanje.x(), -0.5));
		g2D.draw(new Line2D.Double(-0.5, -0.5, -0.5, ubrzanje.y()));

		tr.setToIdentity();
		tr.translate(pozicija.x(), pozicija.y());
		tr.scale(1 + masa / 10, 1 + masa / 10);
		g2D.setTransform(tr);

		g2D.setPaint(Color.red);
		g2D.setStroke(new BasicStroke(0));
		g2D.draw(new Line2D.Double(0, 0, brzina.x(), 0));
		g2D.draw(new Line2D.Double(0, 0, 0, brzina.y()));

		// pisanje fonta
		tr.setToIdentity();
		tr.translate(pozicija.x(), pozicija.y());
		tr.scale(1 + masa / 10, 1 + masa / 10);
		g2D.setTransform(tr);

		FontMetrics fm = g2D.getFontMetrics();
		int sirina = fm.stringWidth(naziv);
		int visina = fm.getHeight();

		g2D.setTransform(tr);

		g2D.setFont(new Font("Arial", Font.BOLD, 1));
		g2D.drawString(naziv, 0, 0);

		tr.setToIdentity();
		tr.translate(pozicija.x(), pozicija.y());
		tr.scale(1 + masa / 10, 1 + masa / 10);
		g2D.setTransform(tr);
		g2D.setPaint(Color.yellow);
		g2D.setStroke(new BasicStroke(1));
		g2D.draw(new Arc2D.Double(-2, -2, 4,4,0,360,Arc2D.OPEN));
		
	}

	public Vektor pravacKa(Planeta p) {
		return p.pozicija.zbir(pozicija.proizvod(-1));
	}

	public double razdaljina(Planeta p) {
		return pozicija.razdaljina(p.pozicija);
	}

	public double razdaljina2(Planeta p) {
		return pozicija.razdaljina2(p.pozicija);
	}

	public Vektor pozicija() {
		return pozicija;
	}
}